home *** CD-ROM | disk | FTP | other *** search
- ------------------------- DESKENV v 3.00 -------------------------
-
- Autor: Uwe Kern
- Datum: 04.06.90
-
- entwickelt mit TURBOASS 1.30
-
- ----------------------------------------------------------------------------
-
- DESKENV ist ein Public-Domain-Programm und darf frei kopiert/
- benutzt werden, sofern der Ordner DESKENV.300 mit den Dateien
-
- - DESKENV.INF (Beispiel-Parameterdatei)
- - DESKENV.PRG (ausführbares Programm)
- - DESKENV.TXT (ausführliche Anleitung)
- - KURZANL.TXT (Kurzanleitung)
-
- vollständig und unverändert weitergegeben wird. Verkauf und
- Weitergabe zu kommerziellen Zwecken sind nicht gestattet!
-
- ----------------------------------------------------------------------------
-
- Gliederung der Dokumentation DESKENV.TXT:
-
- 0. Vorspann
- 1. Allgemeines
- 2. Start aus dem Autoordner
- 3. Start vom Desktop
- 4. Start aus einer Shell
- 5. Die Kommandozeile
- 6. Beispiele für Kommandozeilen
- 7. Zur Speicherverwaltung
- 8. Aufbau der Parameterdatei DESKENV.INF
- 9. Rückgabewerte für das aufrufende Programm
- 10. Warnung
- 11. Literatur
- 12. Danksagung
-
- ****************************************************************************
-
-
- 0. Vorspann
- ===========
-
- Das vorliegende Programm wurde vollständig in Assembler geschrieben, verwen-
- det keine undokumentierten Adressen, und sollte daher problemlos mit den Be-
- triebssystemversionen TOS 1.0, 1.2 und 1.4 laufen. Da mir über die Behand-
- lung von Environments in TOS 1.6 (STE) und TOS 3.0 (TT) bisher keine Infor-
- mationen vorliegen, kann ich für diese Versionen keine Aussagen machen.
- Bei sachgemäβer Anwendung sollte DESKENV eigentlich keine Probleme verursa-
- chen. Gleichwohl kann ich keine Garantie dafür übernehmen, daβ sämtliche an-
- deren Programme dieser Welt sich mit DESKENV vertragen. Ebenso kann ich für
- eventuelle Datenverluste keine Verantwortung übernehmen.
- DESKENV ist thematisch verwandt mit den Programmen DESKTOP (M. Fritze) und
- SETENV (A. Alich), geht jedoch im Funktionsumfang über diese hinaus.
-
-
- 1. Allgemeines
- ==============
-
- DESKENV ist ein universelles Programm zur Manipulation von Environment-
- strings. Das Programm kann gestartet werden
- - mit der Extension '.PRG' im Autoordner (beim Booten),
- - mit einer der Extensions '.PRG','.TOS','.TTP' vom Desktop (Doppelklick),
- - mit beliebiger Extension aus einer Shell.
- In den folgenden Abschnitten werden diese unterschiedlichen Verwendungsarten
- im einzelnen beschrieben.
- Das Programm wurde ursprünglich geschrieben, um eine einfache Möglichkeit
- zum Setzen der AES-Environmentvariablen zur Verfügung zu haben, da die Be-
- triebssysteme TOS 1.0 - 1.4 diesen Punkt leider sträflich vernachlässigen.
- Inzwischen gibt es immer mehr Anwendungen, die Environments benutzen, so daβ
- ein sauberes und zugleich leicht zu bedienendes Hilfsmittel zur Behebung des
- genannten Mangels um so notwendiger wird.
- Das vorliegende Programm ist jedoch in seiner Anwendung nicht auf das AES-
- Environment beschränkt, es gestattet vielmehr eine Einfluβnahme auf alle En-
- vironments von Prozessen, die in der Hierarchie zwischen DESKENV.xxx und dem
- AES liegen.
- Alle Operationen, die DESKENV durchführt, beziehen sich auf einen solchen
- - durch entsprechende Kommandos festzulegenden - Prozeβ, der im weiteren als
- 'aktuelles Level' bezeichnet wird.
- Mit 'Environment' ist stets die Gesamtheit aller Environmentvariablen des
- aktuellen Levels gemeint.
-
-
- 2. Start aus dem Autoordner
- ===========================
-
- DESKENV.PRG sucht im Wurzelverzeichnis des Bootlaufwerks (also dort, wo sich
- auch DESKTOP.INF befinden sollte) die Datei DESKENV.INF, deren Aufbau weiter
- unten beschrieben ist. Ist diese vorhanden, und hat sie eine Länge > 0, so
- wird sie als AES-Environment interpretiert und in den Speicher geladen (alle
- Zeichen mit einem ASCII-Wert < 32 werden dabei eliminiert); nun werden die
- nötigen Adressen gesetzt und anschlieβend das AES gestartet.
- Folglich sollte DESKENV.PRG das physikalisch letzte Programm im Autoordner
- sein, da hinterher keine weiteren Autostart-Programme mehr abgearbeitet wer-
- den. Es gibt leider keinen anderen Weg, als das AES selbst zu starten, denn
- das Betriebssystem initialisiert sein kümmerliches eigenes Environment erst
- dann, wenn der gesamte Autoordner abgearbeitet ist.
- Falls in der Parameterdatei nicht vorhanden, wird eine Environmentvariable
- ENVSIZE=xxxx angelegt, die dann (als vierstellige Hexadezimalzahl) die Länge
- des gesamten Environments enthält.
-
- Wenn eine der folgenden Bedingungen auftritt, terminiert das Programm, ohne
- das AES-Environment zu beeinflussen:
-
- - DESKENV.INF nicht gefunden.
- - DESKENV.INF hat die Länge 0.
- - Fehler beim Öffnen oder Lesen von DESKENV.INF.
- - Beim Programmstart ist die Taste '~' gedrückt.
-
- Das Environment besteht dann nur aus der Variablen PATH=..., insbesondere
- existiert die Variable ENVSIZE nicht.
- Sofern man ein absolut leeres Environment wünscht, sollte man also eine INF-
- Datei der Länge >= 1 anlegen, die mit Nullen gefüllt ist.
-
-
- 3. Start vom Desktop
- ====================
-
- Versehen mit einer der Extensions '.PRG','.TOS','.TTP', kann DESKENV durch
- Doppelklick vom Desktop aus gestartet werden. Eine Kommandozeile kann dabei
- normalerweise nur bei '.TTP'-Programmen übergeben werden.
- Der Programmablauf ist bei den anderen Extensions analog zu einem Start aus
- dem Autoordner, mit dem Unterschied, daβ nun selbstverständlich nicht mehr
- das AES gestartet wird. Je nachdem, ob im bisherigen Environment genug Platz
- für das neu zu setzende vorhanden ist oder nicht, wird ein entsprechender
- Speicherbereich resident belegt. Die Länge des bisherigen Environments ist
- das Maximum des tatsächlich von Variablen belegten Speichers und des Wertes
- von ENVSIZE (falls vorhanden).
- Aus diesem Grund ist es wichtig, daβ ENVSIZE immer einen korrekten Wert hat!
- Beim Start als '.TTP'-Programm kann man zusätzlich eine Kommandozeile über-
- geben, deren Aufbau in Abschnitt 5 ausführlich erläutert wird.
- Nun gibt es einen TOS-Fehler, der mich dazu gebracht hat, eine weitere Op-
- tion für den Desktop-Start einzubauen.
- Beim Starten eines '.TOS'- oder '.TTP'-Programmes vom Desktop werden einige
- Speicherbereiche des Desktop freigegeben, u. a. auch der AES-Bildschirmpuf-
- fer. Das ist zunächst einmal lobenswert. Jedoch wird aufgrund eines Fehlers
- in der Speicherverwaltung nach Beendigung des Programmes der nun wieder er-
- forderliche AES-Bildschirmpuffer zuweilen vom gröβten Speicherblock abge-
- zwackt, so daβ sich dessen Länge unnötigerweise verringert. Dieser Effekt
- tritt auf jeden Fall dann auf, wenn man nach dem Booten erstmals ein '.TOS'-
- oder '.TTP'-Programm vom Desktop startet. Bei TOS 1.4 gehen dadurch immerhin
- etwa 13 K Speicher verloren. Für Einzelheiten verweise ich auf den ausge-
- zeichneten Artikel [3].
- Es ist nun aber nicht einzusehen, daβ man allein für den Wunsch, sich das
- aktuelle Environment anzuschauen (siehe Abschnitt 5), schon eine Strafe von
- 13 K entrichten muβ. Daher habe ich einen primitiven Kommandozeilen-Editor
- eingebaut. Dieser wird dadurch aktiviert, daβ man beim Programmstart die
- linke Shifttaste betätigt, und zwar so lange, bis der Cursor erscheint.
- Diese Eigenschaft ist unabhängig von der Programm-Extension, funktioniert
- also insbesondere für DESKENV.PRG (=> Speicherverlust vermieden)!
- Nun kann man seine Kommandozeile eintippen; die maximale Länge der Eingabe
- beträgt 79 Zeichen. Der 'Editor' versteht folgende Steuerzeichen:
-
- Backspace Lösche Zeichen links vom Cursor.
- Esc Lösche gesamte Zeile.
- Return/Enter Ende der Eingabe, Programmlauf mit Kommandozeile.
- Undo Ende der Eingabe und des Programms.
-
- Alle sonstigen Zeichen mit einem ASCII-Code < 32 werden ignoriert.
-
-
- 4. Start aus einer Shell
- ========================
-
- Bei einer Shell kann man in der Regel direkt beim Programmaufruf eine Kom-
- mandozeile übergeben; der Trick mit der linken Shifttaste (vgl. Abschnitt 3)
- funktioniert aber auch hier, sofern die Shell nicht dazwischenfunkt.
- Wenn die Shell es erlaubt, kann man eventuelle Fehlermeldungen, die in D0.w
- zurückgegeben werden, auswerten. Siehe dazu auch Abschnitt 9.
-
-
- 5. Die Kommandozeile
- ====================
-
- Wir geben zunächst die Syntax der Kommandozeile in EBNF an. Dabei kann ein
- Term in eckigen Klammern '[...]' null- oder einmal vorkommen, ein Term in
- geschweiften Klammern '{...}' beliebig oft (auch keinmal) wiederholt werden.
- Runde Klammern '(...)' dienen der Zusammenfassung von Termen, '|' bedeutet
- ein exklusives Oder; Zeichen in Anführungsstrichen '"..."' sind direkt in
- die Kommandozeile zu schreiben. Diese Form der EBNF wird z. B. in [2] ver-
- wendet.
-
-
- cmd = flag{" "}level{" "}(var"="str|opt)
-
- flag = ["*"]
- level = {"+"}|"."
- var = a{b}
- str = {c}
- opt = [sel]{" "}(path|"/"addr)
- sel = "-"("v"|"V"|"s"|"S"|"b"|"B"|"h"|"H")
- path = [d{b}]
- addr = eeeeeeee
- <char> = ASCII-Zeichen zwischen 32 und 255
- a = <char> mit a <> " ","-","="
- b = <char> mit b <> "="
- c = <char>
- d = <char> mit d <> " ","-","=","/"
- e = "0"|"1"|"2"| ... |"9"|"A"|"B"| ... |"F"|"a"| ... |"f"
-
-
- Diese Regeln sollte man dahingehend interpretieren, daβ alle korrekten Ein-
- gaben die obige Form haben. Die Umkehrung gilt jedoch nicht: nicht jede Kom-
- mandozeile, die syntaktisch korrekt ist, ist auch sinnvoll!
- Bei den Optionen in 'sel' ist zu beachten, daβ kein Unterschied zwischen
- Groβ- und Kleinschreibung gemacht wird; "-v" bedeutet also dasselbe wie
- "-V". Es ist aber zu beachten, daβ es bei den Namen von Environment-Varia-
- blen durchaus auf die genaue Schreibweise ankommt. Da im übrigen bei TOS 1.4
- die Kommandozeile von '.TTP'-Programmen nicht mehr automatisch in Groβbuch-
- staben konvertiert wird, sollte man sich auch bei Verwendung älterer TOS-
- Versionen eine korrekte Eingabe angewöhnen.
-
-
- Die einzelnen Optionen:
-
-
- 1. 'flag'
- ---------
-
- 'flag' gibt an, ob nach der Programmausführung auf einen Tastendruck gewar-
- tet werden soll (bei den Optionen "-v" und "-h" geschieht dies automatisch).
- Falls "*" gesetzt ist, werden folgende Tasten berücksichtigt:
-
- Return/Enter Beendigung ohne weitere Änderung.
- Undo Die vorgesehene Operation wird rückgängig gemacht,
- soweit dies sinnvoll ist (Setzen/Ändern von Environ-
- mentvariablen).
-
-
- 2. 'level'
- ----------
-
- 'level' bestimmt das aktuelle Level. Dabei gibt es folgende Möglichkeiten:
-
- "" aktuelles Level = AES
- "." aktuelles Level = DESKENV.xxx
- "+" aktuelles Level = Vaterprozeβ von DESKENV.xxx
- "++" aktuelles Level = 'Groβvaterprozeβ' von DESKENV.xxx
- usw.
-
- Bei n-fachem "+" wird entsprechend der n-te Prozeβ in der Hierarchie über
- DESKENV.xxx zum aktuellen Level. Dabei kann man jedoch maximal bis zum AES
- aufsteigen, d. h. in der Regel wird man bei "++" oder "+++" schon das AES
- erreicht haben.
-
-
- 3. 'var"="str'
- --------------
-
- 'var' ist eine Environmentvariable des aktuellen Levels, der der Wert 'str'
- zugewiesen werden soll. Ist die Variable bereits vorhanden, wird der String
- 'str' an die entsprechende Stelle im Environment eingefügt (der bisherige
- Wert geht selbstverständlich verloren); andernfalls wird die Variable neu
- angelegt und an den Anfang des Environments kopiert.
- Sofern die Länge des neuen Environments die des alten übertrifft, wird ein
- entsprechender Speicherbereich resident gehalten.
-
-
- 4. 'sel'
- --------
-
- -v view Zeige das durch 'level' bestimmte Environment an. Alle auf
- '-v' folgenden Zeichen werden ignoriert.
- -s save Speichere das durch 'level' spezifizierte Environment auf
- Diskette in der durch 'path' spezifizierten Datei oder an
- der durch 'addr' spezifizierten Adresse.
- Im Falle des Kopierens an eine Adresse folgt auf die zwei
- abschlieβenden Nullbytes ein Byte-Wert, der genau dann Null
- ist, wenn das aktuelle Level niedriger als das AES ist.
- -b backup Speichern mit Backup. Diese Option unterscheidet sich von -s
- nur dadurch, daβ beim Speichern auf Diskette eine eventuell
- schon vorhandene Datei mit dem Namen <path> umbenannt wird;
- sie erhält die Extension '.EBU' (Environment BackUp).
- -h help Anzeige des aktuellen Environments und der Optionen für die
- Kommandozeile in Kurzform. Alle auf '-h' folgenden Zeichen
- werden ignoriert.
-
-
- Bei den Optionen -v und -h wird unabhängig davon, ob am Anfang ein '*' ein-
- gegeben wurde oder nicht, auf einen Tastendruck gewartet. Dabei sind nur die
- Tasten Return/Enter und Undo erlaubt.
- Bei allen weiteren Eingaben der Form '-'{char} wird bisher wie bei '-h' ver-
- fahren. Da diese Zeichenketten aber als mögliche Optionen für künftige Er-
- weiterungen reserviert sind, sollte man zum Aufruf der Help-Funktion nur das
- vorgesehene Kommando '-h' verwenden.
-
-
- 5. Kein 'sel' vorhanden
- -----------------------
-
- a) 'path' Die durch 'path' spezifizierte Datei wird als Environment-
- Parameterdatei interpretiert; das Environment wird entspre-
- chend gesetzt (Aufbau der Datei: siehe Abschnitt 8).
- b) 'addr' An der durch 'addr' spezifizierten Adresse wird eine Kette
- von durch jeweils ein Nullbyte begrenzten und zwei Nullbytes
- abgeschlossenen Strings erwartet. Die Adresse wird als En-
- vironmentzeiger für das aktuelle Level eingetragen. Es er-
- folgt keine Überpüfung, ob die Adresse sinnvoll ist!
-
-
- 6. 'path'
- ---------
-
- 'path' ist der Name oder vollständige Pfadname einer Datei. Es wird immer
- vom derzeit aktuellen Directory ausgehend nach dieser Datei gesucht. Falls
- 'path' leer ist, wird als Default der Name 'DESKENV.PRG' verwendet und folg-
- lich im aktuellen Verzeichnis gesucht.
-
-
- 7. 'addr'
- ---------
-
- 'addr' ist eine Speicheradresse, die in achtstelliger Hexadezimalschreib-
- weise vorliegen muβ. Für die Ziffern 'A' - 'F' sind auch Kleinbuchstaben er-
- laubt. Da grundsätzlich keine Überprüfung stattfindet, ob die angegebene
- Adresse zulässig bzw. sinnvoll ist, sollte man auf eine korrekte Eingabe
- achten. Adressen, die ins ROM zeigen, sind in jedem Fall zu vermeiden!
-
-
- 6. Beispiele für Kommandozeilen
- ===============================
-
- a) Leere Kommandozeile: Suche Datei 'DESKENV.INF' im aktuellen Verzeichnis,
- und setze entsprechend dieser Datei das AES-Environment.
- b) '*': Wie bei a), nur wird zusätzlich auf einen Tastendruck gewartet; bei
- Bedarf kann mittels 'Undo' diese Operation rückgängig gemacht werden.
- c) '*++-sd:\grandma.inf': Speichere das Environment des Groβvaterlevels in
- der Datei 'D:\GRANDMA.INF' und warte auf einen Tastendruck.
- d) '* ++ -S d:\grAndma.InF': Wie c).
- e) '.-b': Speichere das Environment, welches 'DESKENV.xxx' übergeben wurde,
- im aktuellen Verzeichnis in die Datei 'DESKENV.INF'; eine evtl. schon
- vorhandene Datei dieses Namens wird vorher in 'DESKENV.EBU' umbenannt.
- f) '* Hans=1234': Suche im AES-Environment eine Variable namens 'Hans', und
- setze ihren Wert auf '1234'. Lege bei erfolgloser Suche einen neuen En-
- vironmentstring 'Hans=1234' an. Warte anschlieβend auf einen Tastendruck.
- g) '-Vaksdliowueq': Zeige das AES-Environment an, und warte auf eine Taste.
- h) '+-s/0007a12F': Kopiere das Environment des Vaterprozesses an die Adres-
- se $7A12F.
- i) '+ -b /0007A12F': Wie h).
-
-
- 7. Zur Speicherverwaltung
- =========================
-
- Bei den eben beschriebenen Methoden, eine einzelne Variable bzw. das gesamte
- Environment zu verändern, wird - abgesehen von der Adressenversion - in fol-
- gender Weise verfahren:
- Wenn das geänderte Environment in den für das ursprüngliche Environment re-
- servierten Bereich hineinpaβt, wird es dort hineinkopiert.
- Ansonsten wird ein entsprechender Teil des Speichers resident belegt. Dabei
- ist noch zu beachten, daβ im Falle einer Manipulation des AES-Environments
- stets die globale Variable ENVSIZE=xxxx auf den neuesten Stand gebracht wird
- - sofern sie schon vorhanden ist. Falls diese Variable nicht existiert, der
- neue Environmentstring aber ohnehin länger als der alte ist, wird ENVSIZE
- neu angelegt.
- Im residenten Fall läβt sich schwer abschätzen, wieviel Speicher tatsächlich
- verloren geht, da unter Umständen eine Separation von vormals zusammen-
- hängenden Speicherbereichen erfolgt. Für den Start von Programmen ist aber
- meistens nur der gröβte zusammenhängende Speicherblock von Interesse. Diese
- Tatsache macht den in Abschnitt 3 beschriebenen TOS-Fehler so unangenehm.
- Im Falle eines Starts aus dem Autoordner (vermutlich ohnehin die Hauptanwen-
- dung) kann man allerdings die Gröβe des verbrauchten Speichers ziemlich ge-
- nau bestimmen: sie beträgt ca. 128 Bytes + Environment-Länge, wobei die
- letztere sich wieder aus der Länge der Strings und dem Wert von ENVSIZE er-
- rechnet. Es wird also nur soviel Speicher belegt, wie unbedingt nötig bzw.
- unvermeidbar ist.
-
-
- 8. Aufbau der Parameterdatei DESKENV.INF
- ========================================
-
- In der Parameterdatei stehen zeilenweise die einzelnen Environmentvariablen.
- Beliebig viele Leerzeilen sind erlaubt; da alle Zeichen mit einem ASCII-Code
- < 32 als Trennsymbole zwischen einzelnen Variablen interpretiert und elimi-
- niert bzw. durch Nullbytes ersetzt werden, hat man bei der Wahl der Zeilen-
- trennzeichen eine gewisse Freiheit und muβ sich nicht auf die üblichen CR,LF
- oder LF festlegen.
- Eine besondere Rolle spielt die Variable ENVSIZE. Sie gibt die Länge des für
- das AES-Environment reservierten Speicherbereiches an und muβ korrekt in der
- folgenden Form angegeben werden:
-
- ENVSIZE=wxyz mit Hexadezimalziffern w,x,y,z.
-
- Für die Ziffern 'A',...,'F' sind auch Kleinbuchstaben erlaubt. Für die Be-
- rechnung des Wertes gibt es nun zwei Möglichkeiten: den absoluten und den
- relativen Modus. Die Unterscheidung erfolgt durch das oberste Bit von w.
-
- absolut (Bit gelöscht, w = '0',...,'7'):
- ENVSIZE wird berechnet als Maximum der vierstelligen Hexadezimalzahl wxyz
- und der tatsächlichen Länge des durch die Parameterdatei gegebenen En-
- vironments;
- relativ (Bit gesetzt, w = '8',...,'F'):
- ENVSIZE wird berechnet als Summe der vierstelligen Hexadezimalzahl w'xyz,
- wobei w' aus w durch Löschen des obersten Bits entsteht, und der tatsäch-
- lichen Länge des durch die Parameterdatei gegebenen Environments.
-
- Diese Aussagen gelten übrigens nur für den Fall, daβ man als aktuelles Level
- das AES hat. Andernfalls wird ENVSIZE unverändert in das Environment über-
- nommen.
-
- Es ist zu beachten, daβ maximal 32000 Bytes für das Environment reserviert
- werden, d. h. im absoluten Modus sollte man maximal ENVSIZE=7D00 setzen. Bei
- gröβeren Werten könnte es zu unvorhergesehenen Reaktionen kommen.
- Entsprechend muβ man im relativen Modus dafür sorgen, daβ die Gesamtlänge
- nicht zu groβ wird. Es ist auch nicht auszuschlieβen, daβ es schon im TOS
- eine Maximallänge für Environments gibt.
-
-
- 9. Rückgabewerte für das aufrufende Programm
- ============================================
-
- Nach Beendigung des Programmes enthält Register D0 im unteren Wort einen
- Rückgabewert, der das Ergebnis des Programmlaufes dokumentiert. Bei Fehlern
- (D0.w < 0) ertönt zusätzlich ein Glockenton.
- Im folgenden sind nur die wichtigsten Rückgabewerte angegeben; im Zusammen-
- hang mit Diskettenoperationen können selbstverständlich noch einige weitere
- Fehlermeldungen auftreten (ungültige Laufwerksbezeichnung, Sektor nicht ge-
- funden, ...), die man gegebenenfalls in der Literatur (z. B. [1]) nachschla-
- gen kann.
-
-
- Dezimal Hex Bedeutung
- ----------------------------------------------------------------------------
-
- > 0 gewünschte Operation fehlerfrei durchgeführt;
- D0.w Bytes werden resident im Speicher gehalten
- 0 gewünschte Operation fehlerfrei durchgeführt;
- kein speicherresidenter Anteil
-
- -10 FFF6 WRITE_FAULT: Fehler beim Schreiben der Parameterdatei
- (bei Optionen -s,-b)
- -11 FFF5 READ_FAULT: Fehler beim Lesen der Parameterdatei
- -13 FFF3 WRITE_PROTECT: Diskette ist schreibgeschützt
- (bei Optionen -s,-b)
- -33 FFDF EFILNF: Parameterdatei nicht gefunden
- -36 FFDC EACCDN: Zugriff nicht erlaubt
- (bei Optionen -s,-b)
- -128 FF80 CANCEL: Abbruch, 'Undo'-Taste wurde gedrückt
- (bzw. '~' beim Programmstart)
-
-
- Die Fehlermeldung EACCDN entsteht etwa dann, wenn man das Environment auf
- Diskette speichern will, dort aber schon ein Ordner mit dem für die Datei
- vorgesehenen Namen existiert.
- Die Fehlermeldung READ_FAULT/WRITE_FAULT wird auch dann erzeugt, wenn die
- betreffende Datei zwar gelesen/beschrieben werden kann, aber die Anzahl der
- so bewegten Bytes nicht der vorgesehenen Dateilänge entspricht. Dies ist vor
- allem bei Schreibversuchen auf ein fast volles Laufwerk zu erwarten.
-
- Hat man DESKENV mit der Extension '.PRG' vom Desktop gestartet, so bewirken
- manche Fehlermeldungen (z. B. EACCDN) das Erscheinen einer Alertbox, die zu
- dem betreffenden Fehler einen mehr oder weniger aussagekräftigen Text lie-
- fert. Für diese Alertboxen ist das Betriebssystem verantwortlich, das offen-
- sichtlich einen Blick auf D0 wirft.
-
- Die Fehlermeldungen werden von DESKENV als vierstellige Hexadezimalzahlen
- angezeigt. Im Falle eines residenten Anteils von $xxxx Bytes erscheint eine
- Ausgabe der Form 'R = xxxx'. Diese Angabe ist - wie auch die Werte bei
- 'Bytes used/free = yyyy/zzzz' - als Hexzahl zu verstehen und erfolgt wie
- immer ohne Gewähr.
-
-
- 10. Warnung
- ===========
-
- ENVSIZE ist eine globale Environmentvariable, die sich einzig und allein auf
- das AES-Environment bezieht; sie gibt die Länge des dafür reservierten Spei-
- chers an. Manipulationen durch 'Hineinpoken' von Werten können entsetzliche
- Folgen haben (Crash, Chaos und Verwirrung).
- Hingegen ist es durchaus erlaubt, ENVSIZE mit dem Kommando 'ENVSIZE=xxxx'
- einen neuen Wert zu geben. Dabei ist sowohl der absolute als auch der rela-
- tive Modus (vgl. Abschnitt 8) möglich.
- Einzige Einschränkung: eine Verkleinerung des reservierten Bereiches ist
- nicht möglich (Beispiel: ist der bisherige Wert 'ENVSIZE=0020', so wird das
- Kommando 'ENVSIZE=0010' schlicht und einfach ignoriert).
- Auf einem Level unterhalb des AES kann man ENVSIZE nach Belieben verändern,
- da ENVSIZE ja nur über das AES-Environment eine Aussage macht. Wenn man al-
- lerdings Grund zu der Annahme hat, daβ ein Tochterprozeβ die Gröβe des AES-
- Environments feststellen will, sollte man jenem fairerweise einen korrekten
- ENVSIZE-String übergeben.
-
- Die Globalität von ENVSIZE hat ihre Ursache darin, daβ das Betriebssystem
- sich natürlich nicht darum kümmert, wieviel Platz für sein Environment ge-
- rade reserviert ist, sondern nur das aktuell vorhandene Environment berück-
- sichtigt. Auch hierzu wieder ein Beispiel: ENVSIZE=0100, tatsächliche Länge
- = $80 Bytes. Beim Aufruf eines Programmes mittels 'Pexec' reserviert TOS nun
- unmittelbar vor der Basepage einen Bereich der Länge $80 und kopiert die
- durch jeweils ein Nullbyte getrennten und eine doppelte Null abgeschlossenen
- Environmentstrings in diesen Bereich. Würde man nun die volle Länge von $100
- Bytes ausschöpfen, so müβte man dazu einen Teil der Basepage überschreiben.
- Die andere Möglichkeit ist nun, sich im eigenen Programm genügend Speicher
- zu reservieren, dorthin das eigene Environment zu kopieren und entsprechend
- für die aufzurufenden Tochterprozesse zu manipulieren.
-
- Im übrigen kann jeder Prozeβ mit seinem eigenen Environment machen, was er
- will, ohne daβ davon irgendwelche übergeordneten Prozesse betroffen sind;
- umgekehrt haben Änderungen an einem Parent-Environment erst beim nächsten
- Child-Aufruf Konsequenzen.
-
- Lange Environmentstrings können zu Speicherfressern ausarten, da sie in der
- Regel an alle Tochterprozesse weitervererbt und damit dupliziert werden. Zu-
- dem bekommen auch alle Accessories ihr eigenes Environment vorgesetzt (vgl.
- [3]). Ein groβer Wert von ENVSIZE (ca. 2-4 K) ist hingegen nicht unbedingt
- schädlich, da ja - wie bereits erwähnt - nur die eigentlichen Environment-
- strings weitervererbt werden, man andererseits aber genügend Platz für Expe-
- rimente hat, ohne ständig neue Programmleichen im Speicher zu erzeugen (vgl.
- Abschnitt über die Speicherverwaltung).
-
-
- 11. Literatur
- =============
-
- [1] Jankowski/Reschke/Rabich: ATARI ST Profibuch, 2. Aufl.
- [2] Dal Cin/Lutz/Risse: Programmierung in Modula-2, 2. Aufl.
- [3] ???: TOS intern, 'ST Computer'-Sonderheft Nr. 2
-
-
- 12. Danksagung
- ==============
-
- Ich danke allen, die mir durch Anregungen, Kritik und gutgemeinte Vorschläge
- die Programmierung erschwert haben, da das ursprüngliche DESKENV (v 2.xx)
- sonst vermutlich für immer als ein zwar recht nützliches, jedoch unflexibles
- Programm ein kümmerliches Dasein gefristet hätte.
-
-